package fr.afcepf.ai91.qualimetrie.business;

import fr.afcepf.ai91.qualimetrie.entity.Adresse;
import fr.afcepf.ai91.qualimetrie.entity.Personne;

/**
 * Dfinition des fonctionnalité pour la gestion de l'entite {@link Personne} et {@link Adresse}.
 * @author Stagiaire
 *
 */
public interface IBusinessGestionPersonne {
    /**
     * Methode permettant d'ajouter une entitee
     * {@link Personne} dans la BDD 'qualimetrie'.
     * @param pers la{@link Personne} a ajouter.
     * @return
     * <code>
     * <ul>
     *  <li> Si la Personne possède une Adresse <br/> non null:
     *  <ol>
     *  <li>
     *  Ajout de l'adresse
     *  </li>
     *  <li>
     *  Si l'ajout Adresse Ok, ajout de la Personne
     *  </li>
     *  <li>
     *  Si ajout de la Personne ok, association de l'Adresse à la Personne
     *  </li>
     *  </ol>
     *  </li>
     *  <li>
     *  si erreur cf sinon..
     *  </li>
     *  <ul type="square">
     *  <li>
     *  Sinon: <br/>
     *  si l'ajout a fonctionne:
     *  L'objet Personne avec sa clé primaire '{@link Personne#getId()}'
     *  renseigné </li>
     *  <li> sinon l'objet Personne avec sa clé primaire '{@link Personne#getId()}' null</li>
     *  </ul>
     *  </ul>
     *  </code>
     */
    Personne ajouter(Personne pers);
    /**
     * Méthode permettant d'associer une Adresse a
     * la Personne sans la BDD.
     * @param pers la Personne avec sa nouvelle Adresse
     * @return
     * <code>
     * <ul>
     *  <li>Si association Ok: <br/>
     *      l'Adresse de la Personne est renseignee. </li>
     *  <li>
     *  si Pas oj: <br/>
     *  L'adresse de personne est null. </li>
     * </ul>
     * </code>
     */
    Personne associerAdresse(Personne pers);
    /**
     * Methode permettant d'ajouter une entitee
     * {@link Adresse} dans la BDD 'qualimetrie'.
     * @param adr l'{@link Adresse} a ajouter.
     * @return
     * <code>
     * <ul>
     *  <li> Si l'ajout a fonctionne:
     *  L'objet Adresse avec sa clé primaire '{@link Adresse#getId()}'
     *  renseigné </li>
     *  <li> sinon l'objet Adresse avec sa clé primaire '{@link Adresse#getId()}' null</li>
     *  </ul>
     *  </code>
     */
    Adresse ajouter(Adresse adr);
}
